package busco

// 副本的功能主体包括所有
// 可统计数据：
// -完成关卡数
// -闯关次数
// -刷新次数
// -击杀敌人数量
// -伤害首领生命
// @schema_export --ident=schema --json --config=副本
// @schema_go
// @cache_go
// @cache_ts
// @alias 副本
type B副本 struct {
	B主体
	// @alias 标识
	B标识 string
	// @alias 标旗
	B标旗 map[P副本标旗]bool
	// 需要领取奖励后才能重新闯关
	// @alias 闯关次数
	C闯关次数 int
	// 刷新[闯关次数]的次数
	// @alias 刷新次数
	S刷新次数 int
	// 闯同一关时，可领奖的次数
	// 场景：一些关卡只有第一次完成才能领取奖励，此时设置[领奖次数]为1
	// @alias 领奖次数
	L领奖次数 int
	// 符合条件才能开启副本
	// 场景：达到X等级才能开启
	// @alias 开启条件
	K开启条件 map[string]string `link:"条件"`
	// 开启副本功能需要消耗的资源的默认值
	// 场景：需要1000金币才能开启副本
	// @alias 开启消耗
	G开启消耗 string `link:"消费"`
	// 闯关需要消耗的资源
	// 场景：闯关需要消耗体力
	// @alias 闯关消耗
	S闯关消耗 string `link:"消费"`
	//刷新需要消耗的资源
	// @alias 刷新消耗
	S刷新消耗 string `link:"消费"`
	// @alias 场景路径
	C场景路径 string
	// 结束获得的奖励
	// 奖励都即时发放，如果需要延时领取，使用任务
	// 场景：世界BOSS结束后，根据伤害量派发奖励。
	// 奖励根据伤害量变化，可使用修正实现。
	// @alias 结束奖励
	J结束奖励 string `link:"奖励"`
	// @alias 结束重置
	C结束重置 *S副本_重置
	// @alias 后续副本
	H后续副本 string `link:"副本"`
	// @alias 每天重置时间
	M每天重置时间 int
	// 使用cron方式配置，可提供常用选项，例如每天凌晨，每星期凌晨，每月等
	// @alias 重置副本时间
	C重置副本时间 string

	// 初始化时，卡包中的卡片，如果存在【战斗关联】的单位，则通过卡片初始化单位
	// @alias 出战卡包
	C出战卡包 *S查找卡包

	// 出站的
	// @alias 首领卡包
	S首领卡包 *S查找卡包

	// @alias 持续时间
	S首领时间 float64 `alias:"持续时间"`

	// @alias 功能集
	G功能集 map[string]string `link:"功能"`
}
type S副本_重置 struct {
	// @alias 允许
	Y允许 bool `alias:"允许"`
	// 可重复的最大次数
	// @alias 最大次数
	X最大次数 int `alias:"最大次数"`
}

// @schema_export --ident=schema --json
// @schema_go
// @alias 副本标旗
type P副本标旗 int

const (
	// 设置后需要主动开启副本，可通过[启动消耗]设置开启费用
	// 场景：需要购买的副本
	P副本标旗_允许自动开启 P副本标旗 = 1

	// 场景：挂机爬塔的副本
	P副本标旗_自动进入下一关 P副本标旗 = iota
	// 通常用于奖励不占用背包格子的情况，否则需要额外处理背包已满的情况
	P副本标旗_自动领取奖励
	// 战斗结束后，记录单位的血量，可用于统计排名
	// 场景：世界首领/公会首领/角色首领的玩法
	P副本标旗_记录单位血量
	// 战斗结束后，记录单位击杀数量，可用于统计排名
	// 场景：世界怪物攻城/公会怪物攻城/角色怪物攻城的玩法
	P副本标旗_记录击杀数量
	// 战斗结束后，记录闯关时长，可用于统计排名
	// 场景：按照闯关时间进行排行的活动或功能，在活动期间内，可以重复闯关，刷新闯关时间
	P副本标旗_记录闯关时长
	// 重新闯关后，允许再次领奖
	P副本标旗_允许再次领奖
	// 允许每天重置闯关次数、刷新次数和领奖次数
	// 可指定[每天重置时间]
	P副本标旗_允许每天重置次数
	// 允许重置副本
	// 与[允许每天重置次数]的区别在于，这里重置整个副本的数据
	// 可指定[重置副本时间]
	P副本标旗_允许重置副本
)

// @schema_go --EnumToString=true
// @alias 副本关卡关系
type F副本关卡关系 int

const (
	// 完成前一个关卡副本才能开始下一个
	// 场景：闯关，副本类型的玩法
	F副本关卡关系_连续 F副本关卡关系 = iota
	// 副本与副本之间是并列关系，只有开启条件
	// 场景：世界Boss列表，日常副本列表
	F副本关卡关系_并列
)
